/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Sueca;

import java.util.Random;

/**
 *
 * @author Administrador
 */
public class IA {

    private static IA instance;

    private IA(){

    }

    public static IA getInstance(){
        if(instance == null){
            instance = new IA();
        }
        return instance;
    }

    public Carta escolherJogada(Jogador jog){
        Random numerosRandomicos = new Random();
        Integer random;
        Carta mao[];
        mao = new Carta[10];
        mao = jog.getJogo();
        Carta crt = new Carta();

        for (int i = 0; i < jog.getJogo().length; i++){
            random = numerosRandomicos.nextInt(jog.getJogo().length);
            crt = mao[random];
            }
        return crt;
    }
    /*
    public Carta iaMedia(Carta[] crts, Carta cartaSaida, Carta trunfo, Jogador jog, Carta[] cartasMesa){

        Carta cartaJogada = new Carta();
        Carta crt = new Carta();
        Carta mao[];
        mao = new Carta[10];
        mao = jog.getJogo();
        boolean cartaEscolhida = false;

        //teste se array da messa é vazio
        if (crts == null){

            //testa se tem algum as diferente do naipe do trunfo
            for (int i = 0; i < mao.length; i++){
                if (mao[i].GetNome().equals("as")){
                    if (! mao[i].GetNaipe().equals(trunfo.GetNaipe())){
                        cartaJogada = mao[i];
                        cartaEscolhida = true;
                    }
                }
            }

            if (!cartaEscolhida){

                //senão tiver as, seleciona a menor carta da mão
                for (int i = 0; i < mao.length; i++){
                    if (cartaJogada == null){
                        if (mao[i].GetNaipe().equals(trunfo.GetNaipe()))
                            cartaJogada = mao[i];
                    }else{
                        if ((!mao[i].GetNaipe().equals(trunfo.GetNaipe())) && (mao[i].GetPonto() < cartaJogada.GetPonto())) {
                            cartaJogada = mao[i];
                        }
                    }
                }
            }

        }else{

            boolean temTrunfo = false;

            for (int i = 0; i < crts.length; i++){
                if (crts[i].GetNaipe().equals(trunfo.GetNaipe())){
                    temTrunfo = true;
                }
            }

            if(temTrunfo){
                for (int i = 0; i < mao.length; i++){
                    if (cartaJogada == null){
                        cartaJogada = mao[i];
                    }else{
                        if (mao[i].GetPonto() < cartaJogada.GetPonto()) {
                            cartaJogada = mao[i];
                        }
                    }
                }
            }else{
                Carta maiorCartaMao = new Carta();
                for (int i = 0; i < mao.length; i++){
                    if (maiorCartaMao == null){
                        maiorCartaMao = mao[i];
                    }else{
                        if (mao[i].GetPonto() > maiorCartaMao.GetPonto()) {
                            maiorCartaMao = mao[i];
                        }
                    }
                }
                Carta maiorCartaMesa = new Carta();
                for (int i = 0; i < cartasMesa.length; i++){
                    if (maiorCartaMesa == null){
                        maiorCartaMesa = cartasMesa[i];
                    }else{
                        if (mao[i].GetPonto() > maiorCartaMesa.GetPonto()) {
                            maiorCartaMesa = cartasMesa[i];
                        }
                    }
                }

                if (maiorCartaMao.GetPonto() > maiorCartaMesa.GetPonto()){
                    cartaJogada = maiorCartaMao;
                }else{
                    for (int i = 0; i < mao.length; i++){
                    if (cartaJogada == null){
                        if (mao[i].GetNaipe().equals(trunfo.GetNaipe()))
                            cartaJogada = mao[i];
                    }else{
                        if ((!mao[i].GetNaipe().equals(trunfo.GetNaipe())) && (mao[i].GetPonto() < cartaJogada.GetPonto())) {
                            cartaJogada = mao[i];
                        }
                    }
                }
                }

            }

        }

        return cartaJogada;
    }*/

    public Carta iaMedia(Carta[] crts, Carta trunfo, Jogador jog, Carta[] cartasMesa){

        Carta cartaJogada = new Carta();
        Carta crt = new Carta();
        Carta mao[];
        mao = new Carta[10];
        mao = jog.getJogo();
        boolean cartaEscolhida = false;

        //testa se o array da mesa é vazio
        if (crts == null){

            //testa se tem algum 'As' diferente do naipe do trunfo
            for (int i = 0; i < mao.length; i++){
                if (mao[i].GetNome().equals("as")){
                    if (! mao[i].GetNaipe().equals(trunfo.GetNaipe())){
                        cartaJogada = mao[i];
                        cartaEscolhida = true;
                    }
                }
            }

            if (!cartaEscolhida){

                //senão tiver as, seleciona a menor carta da mão
                for (int i = 0; i < mao.length; i++){
                    if (cartaJogada.GetNome() == null){
                        if (mao[i].GetNaipe().equals(trunfo.GetNaipe()))
                            cartaJogada = mao[i];
                    }else{
                        if ((!mao[i].GetNaipe().equals(trunfo.GetNaipe())) && (mao[i].GetPonto() < cartaJogada.GetPonto())) {
                            cartaJogada = mao[i];
                        }
                    }
                }
            }

        }else{

            boolean temTrunfo = false;

            for (int i = 0; i < crts.length; i++){
                if (crts[i] != null){
                    if (crts[i].GetNaipe().equals(trunfo.GetNaipe())){
                        temTrunfo = true;
                     }
                }else{
                        i = crts.length;
                }
            }

            if(temTrunfo){
                for (int i = 0; i < mao.length; i++){
                    if (cartaJogada.GetNome() == null){
                        cartaJogada = mao[i];
                    }else{
                        if (mao[i].GetPonto() < cartaJogada.GetPonto()) {
                            cartaJogada = mao[i];
                        }
                    }
                }
            }else{
                Carta maiorCartaMao = new Carta();
                maiorCartaMao = null;
                for (int i = 0; i < mao.length; i++){
                    if (maiorCartaMao == null){
                        maiorCartaMao = mao[i];
                    }else{
                        if (mao[i].GetPonto() > maiorCartaMao.GetPonto()) {
                            maiorCartaMao = mao[i];
                        }
                    }
                }
                Carta maiorCartaMesa = new Carta();
                maiorCartaMesa = null;
                for (int i = 0; i < cartasMesa.length; i++){
                    if (cartasMesa[i] != null){
                        if (maiorCartaMesa == null){
                           maiorCartaMesa = cartasMesa[i];
                        }else{
                            if (mao[i].GetPonto() > maiorCartaMesa.GetPonto()) {
                                maiorCartaMesa = cartasMesa[i];
                            }
                        }
                    }else{
                        i = cartasMesa.length;
                    }
                }

                if (maiorCartaMao.GetPonto() > maiorCartaMesa.GetPonto()){
                    cartaJogada = maiorCartaMao;
                }else{
                    for (int i = 0; i < mao.length; i++){
                    if (cartaJogada.GetNome() == null){
                        if (mao[i].GetNaipe().equals(trunfo.GetNaipe()))
                            cartaJogada = mao[i];
                    }else{
                        if ((!mao[i].GetNaipe().equals(trunfo.GetNaipe())) && (mao[i].GetPonto() < cartaJogada.GetPonto())) {
                            cartaJogada = mao[i];
                        }
                    }
                }
                }

            }

        }

        return cartaJogada;
    }

}
